package com.rd.student.jiaji.class3.sunguowei.day25;

import java.io.*;

public class TestCopy {
    public static void main(String[] args) throws Exception {
        File srcfile=new File("stream.txt");
        File destFile=new File("streamCopy.txt");
        copyFile2(srcfile,destFile);

    }

    public static void copyFile(File srcFile,File destFile)throws Exception{
        //原文件是存在的 目标文件不一定存在
        if(!destFile.exists()){
            destFile.createNewFile();
        }
        //先从原文件中读取数据 再将数据写入到目标文件
        InputStream is=new FileInputStream(srcFile);
        byte[] byteArr=new byte[(int)srcFile.length()];
        is.read(byteArr);
        String content=new String(byteArr);

        OutputStream os=new FileOutputStream(destFile);
        byte[] byteArr1=content.getBytes();
        os.write(byteArr1);

        os.close();
        is.close();
    }


    public static void copyFile1(File srcFile,File destFile)throws Exception{
        //原文件是存在的 目标文件不一定存在
        if(!destFile.exists()){
            destFile.createNewFile();
        }
        //先从原文件中读取数据 再将数据写入到目标文件
        InputStream is=new FileInputStream(srcFile);
        byte[] byteArr=new byte[(int)srcFile.length()];
        is.read(byteArr);

        //如果去掉额外的数组声明  也去掉对String的处理
        //相当于将读取数据和写入数据的两个水管相连  中间不做处理
        OutputStream os=new FileOutputStream(destFile);
        os.write(byteArr);

        os.close();
        is.close();
    }

    public static void copyFile2(File srcFile,File destFile)throws Exception{
        //原文件是存在的 目标文件不一定存在
        if(!destFile.exists()){
            destFile.createNewFile();
        }
        //先从原文件中读取数据 再将数据写入到目标文件
        InputStream is=new FileInputStream(srcFile);
        //如果去掉额外的数组声明  也去掉对String的处理
        //相当于将读取数据和写入数据的两个水管相连  中间不做处理
        OutputStream os=new FileOutputStream(destFile);

        //往往不按照文件的大小来创建字节数组
        //如果文件比较大  那么内存处理不了
        //可以给它一个固定的 但更合适的大小
//        byte[] byteArr=new byte[(int)srcFile.length()];
        byte[] byteArr=new byte[1024];
        //因为如果水流过多 内存处理不了 所以将1024作为每次分批的大小
        //相当于每一次开一下水龙头 然后
        int len=0;
        while ((len=is.read(byteArr)) !=-1){
            os.write(byteArr,0,len);
        }

        os.close();
        is.close();
    }
}
